#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
-------------------------------------------------
   File Name：      operate_csv.py
   Remark :         
-------------------------------------------------
"""

"""
生成器方式去读取csv里面的数据来做数据驱动测试，yield关键字来控制一行一行的读取字典里面的内容（字典里面的数据是隐形的，还未产生，就和奶糖盒子一样的道理）
"""

import csv


def read_csv_file(file_path, arg_names=None):
    """
    从CSV文件中读取指定字段的数据，并返回生成器。

    Args:
        file_path (str): CSV文件的路径。
        fields (List[str], optional): 需要读取的字段名列表。如果为None，则使用CSV文件的第一行（标题行）作为字段名。默认为None。

    Returns:
        Generator[Tuple[str, ...], None, None]: 生成器，每个元素是包含指定字段值的元组。

    Raises:
        无特定异常抛出，但会捕获并打印FileNotFoundError和一般异常信息。

    """
    try:
        with open(file_path, 'r', newline='') as file:
            reader = csv.DictReader(file)
            # 如果fields为None，则使用CSV文件的第一行（标题行）作为字段名
            if arg_names is None:
                # 使用CSV文件的第一行（标题行）作为字段名
                arg_names = reader.fieldnames
            for row in reader:
                # 使用get方法避免KeyError
                # 遍历字段列表，从每一行中获取对应的字段值，如果字段不存在则使用空字符串代替
                arg_values = tuple(row.get(field, '') for field in arg_names)
                yield arg_values
    except FileNotFoundError:
        # 文件未找到时的异常处理

        # 打印文件未找到的错误信息
        print(f"File {file_path} not found.")
    except Exception as e:
        # 其他可能的异常处理

        # 打印读取文件时发生的错误信息
        print(f"An error occurred while reading {file_path}: {e}")
